package model.iview;

import model.Bonus;
import model.Tile;
import util.Coordinate;

public interface IBoard {

    /**
     * Retourne le bonus situé sur une case donnée
     * 
     * @param coord
     *            Emplacement de la case
     * @return Le bonus situé sur la case
     */
    public abstract Bonus getBonus(Coordinate coord);

    /**
     * Retourne le score formé entre deux cases. Si un bonus est déjà utilisé,
     * il ne compte plus en tant que bonus.
     * 
     * @param start
     *            Case de départ
     * @param end
     *            Case de fin
     * @return Le score formé en tenant compte des bonus. En cas de paramètres
     *         invalides, la méthode retournera 0.
     */
    public abstract int getScore(Coordinate start, Coordinate end);

    /**
     * Retourne la tuile présente sur le plateau.
     * 
     * @param coord
     *            Emplacement de la case
     * @return La tuile présente sur le plateau, <code>null</code> si il n'y en
     *         a pas.
     */
    public abstract Tile getTile(Coordinate coord);

    /**
     * Détermine si une tuile est présente sur le plateau
     * 
     * @param coord
     *            Emplacement de la case
     * @return <code>true</code> si il y a une tuile sur cette case,
     *         <code>false</code> sinon.
     */
    public abstract boolean hasTile(Coordinate coord);

    /**
     * Détermine si une tuile est présente sur le plateau
     * 
     * @param coord
     *            Emplacement de la case
     * @return <code>true</code> si il y a une tuile sur cette case,
     *         <code>false</code> sinon.
     */
    public abstract boolean hasTile(int i, int minC);

    /**
     * Retourne la tuile présente sur le plateau.
     * 
     * @param coord
     *            Emplacement de la case
     * @return La tuile présente sur le plateau, <code>null</code> si il n'y en
     *         a pas.
     */
    public abstract ITile getTile(int i, int minC);

}